// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.google.zxing.common; public final class BitArray { private int a[]; private int b; public BitArray() { b = 0; a = new int[1]; } public BitArray(int i) { b = i; a = b(i); } private void a(int i) { if (i > a.length << 5) { int ai[] = b(i); System.arraycopy(a, 0, ai, 0, a.length); a = ai; } } private static int[] b(int i) { return new int[i + 31 >> 5]; } public void appendBit(boolean flag) { a(1 + b); if (flag) { int ai[] = a; int i = b >> 5; ai[i] = ai[i] | 1 << (0x1f & b); } b = 1 + b; } public void appendBitArray(BitArray bitarray) { int i = bitarray.b; a(i + b); for (int j = 0; j < i; j++) { appendBit(bitarray.get(j)); } } public void appendBits(int i, int j) { if (j < 0 || j > 32) { throw new IllegalArgumentException("Num bits must be between 0 and 32"); } a(j + b); while (j > 0) { boolean flag; if ((1 & i >> j - 1) == 1) { flag = true; } else { flag = false; } appendBit(flag); j--; } } public void clear() { int i = a.length; for (int j = 0; j < i; j++) { a[j] = 0; } } public void flip(int i) { int ai[] = a; int j = i >> 5; ai[j] = ai[j] ^ 1 << (i & 0x1f); } public boolean get(int i) { return (a[i >> 5] & 1 << (i & 0x1f)) != 0; } public int[] getBitArray() { return a; } public int getNextSet(int i) { int l; if (i >= b) { l = b; } else { int j = i >> 5; int k; for (k = a[j] & (-1 ^ -1 + (1 << (i & 0x1f))); k == 0; k = a[j]) { if (++j == a.length) { return b; } } l = (j << 5) + Integer.numberOfTrailingZeros(k); if (l > b) { return b; } } return l; } public int getNextUnset(int i) { int l; if (i >= b) { l = b; } else { int j = i >> 5; int k; for (k = (-1 ^ a[j]) & (-1 ^ -1 + (1 << (i & 0x1f))); k == 0; k = -1 ^ a[j]) { if (++j == a.length) { return b; } } l = (j << 5) + Integer.numberOfTrailingZeros(k); if (l > b) { return b; } } return l; } public int getSize() { return b; } public int getSizeInBytes() { return 7 + b >> 3; } public boolean isRange(int i, int j, boolean flag) { if (j < i) { throw new IllegalArgumentException(); } if (j == i) { return true; } int k = j - 1; int l = i >> 5; int i1 = k >> 5; int k1; int l1; int i2; int j2; int k2; for (int j1 = l; j1 <= i1; j1++) { int l2; if (j1 > l) { k1 = 0; } else { k1 = i & 0x1f; } if (j1 < i1) { l1 = 31; } else { l1 = k & 0x1f; } if (k1 == 0 && l1 == 31) { j2 = -1; } else { i2 = k1; j2 = 0; while (i2 <= l1) { k2 = j2 | 1 << i2; i2++; j2 = k2; } } l2 = j2 & a[j1]; if (!flag) { j2 = 0; } if (l2 != j2) { return false; } } return true; } public void reverse() { int ai[] = new int[a.length]; int i = b; for (int j = 0; j < i; j++) { if (get(-1 + (i - j))) { int k = j >> 5; ai[k] = ai[k] | 1 << (j & 0x1f); } } a = ai; } public void set(int i) { int ai[] = a; int j = i >> 5; ai[j] = ai[j] | 1 << (i & 0x1f); } public void setBulk(int i, int j) { a[i >> 5] = j; } public void setRange(int i, int j) { if (j < i) { throw new IllegalArgumentException(); } if (j != i) { int k = j - 1; int l = i >> 5; int i1 = k >> 5; int j1 = l; while (j1 <= i1) { int k1; int l1; int j2; int ai[]; if (j1 > l) { k1 = 0; } else { k1 = i & 0x1f; } if (j1 < i1) { l1 = 31; } else { l1 = k & 0x1f; } if (k1 == 0 && l1 == 31) { j2 = -1; } else { int i2 = k1; j2 = 0; while (i2 <= l1) { int k2 = j2 | 1 << i2; i2++; j2 = k2; } } ai = a; ai[j1] = j2 | ai[j1]; j1++; } } } public void toBytes(int i, byte abyte0[], int j, int k) { int l = 0; int k1; for (int i1 = i; l < k; i1 = k1) { int j1 = 0; k1 = i1; int l1 = 0; for (; j1 < 8; j1++) { if (get(k1)) { l1 |= 1 << 7 - j1; } k1++; } abyte0[j + l] = (byte)l1; l++; } } public String toString() { StringBuilder stringbuilder = new StringBuilder(b); int i = 0; while (i < b) { if ((i & 7) == 0) { stringbuilder.append(' '); } char c; if (get(i)) { c = 'X'; } else { c = '.'; } stringbuilder.append(c); i++; } return stringbuilder.toString(); } public void xor(BitArray bitarray) { if (a.length != bitarray.a.length) { throw new IllegalArgumentException("Sizes don't match"); } for (int i = 0; i < a.length; i++) { int ai[] = a; ai[i] = ai[i] ^ bitarray.a[i]; } } }